This disclosure relates to the art of color image processing, more specifically, the presently disclosed methods, systems and apparatus provide for the selection of node locations and associated node values for a multi-dimensional color transformation LUT, based upon a joint optimization approach.
An image prepared for rendering on an electronic device is represented by a set of pixels that each describes a small portion of the image in terms of digital values that represent the colorants available to the rendering device. For example, in an image prepared for display on a video monitor, each pixel typically describes the intensity of the red (R), green (G) and blue (B) components of light that are illuminated to reproduce the color at the associated region of the screen. Similarly, in an image prepared for rendering on a printing device operating in a CMYK color space, each pixel describes the amount of cyan (C), magenta (M), yellow (Y) and black (K) colorants to be applied to the print medium in order to reproduce the color at the associated region of the rendered image.
In an 8-bit system, the pixel value for each colorant can range from 0 to 255, with 255 representing the maximum or fully saturated amount of colorant, For an RGB color space, for example, fully saturated red is represented by the pixel value R=255, G=0, B=0 and ideally, a printer operating in a CMYK color space, for example, would reproduce the fully saturated red in response to the pixel value C=0, M=255, Y=255, K=0. In other words, the magenta and yellow colorants, when combined through simple subtractive mixing, would be perceived as red.
However, the spectral properties of the red phosphor used in the video monitor typically differ from those of the subtractively mixed magenta and yellow colorants of a particular printer. As a result, the visual appearance of the red described in RGB space and displayed on the video monitor will usually not match that of the red described in CMYK space and printed on a page. Further, even when rendered on different devices of the same type (e.g., two CMYK printers), the colors reproduced in response to the same color value (e.g., CMYK) will often differ in visual appearance. Accordingly, color transformations are typically required when color matching between two rendering devices is required. In the example described above, the saturated red pixel with RGB color value 255, 0, 0 may be mapped to a CMYK printer pixel that represents, for example, magenta and/or yellow that is less than fully saturated and also calls for a small cyan component, e.g., C=27, M=247, Y=255, K=0.
Color transformations are often complex, multidimensional functions that correct for the nonlinear behavior of both digital color devices and the human visual system, which would require a significant amount of memory in order to process large images in real-time. To reduce the computational cost, these functions are typically implemented as multidimensional lookup tables (LUTs). Conventionally, a LUT is essentially a rectangular grid or lattice that spans the input color space of the transform. Output values corresponding to each node, i.e., intersection point, of the grid are pre-computed and stored in the LUT. Input colors are processed through the LUT by i) retrieving the cell to which the input color belongs, and ii) performing an interpolation among a subset of the surrounding cell vertices to compute the output color value.
The accuracy of the LUT is directly proportional to the density of the lattice, or equivalently, the overall size of the LUT. However the size of a LUT is typically limited by the amount of available processor RAM and cache memory. Accordingly, LUTs are built with an input node sampling that attempts to maximize transform accuracy subject to these hardware-imposed constraints on LUT size. For example, while a 24-bit RGB vector would be capable of describing over 16 million colors, it would not be unusual for the corresponding RGB-to-CMYK LUT to be partitioned into 16.times.16.times.16 (4096) table locations or nodes, with one CMYK value stored at each node. CMYK values of points not directly represented by nodes are then determined by interpolation among nodes or some other suitable calculation and thus, the issue of “node placement” becomes very important.
Thus both the locations of the nodes in the input space, and the output values stored at these nodes contribute to overall LUT accuracy. In spite of this significance, however, input nodes are often positioned on a uniformly spaced rectangular lattice with no regard to the characteristics of the color transform. More sophisticated techniques attempt to adapt node locations to transform characteristics such as transform curvature, however no known attempt has been made to simultaneously optimize node locations and values.